package com.sale.salesystem.service;

import com.sale.salesystem.dto.DashboardQueryDTO;
import com.sale.salesystem.vo.DashboardVO;
import com.sale.salesystem.vo.ProductAnalysisVO;
import com.sale.salesystem.vo.CustomerAnalysisVO;
import com.sale.salesystem.vo.ShopAnalysisVO;
import com.sale.salesystem.dto.DashboardCreateDTO;
import com.sale.salesystem.dto.DashboardChartDTO;
import com.sale.salesystem.vo.DashboardDetailVO;
import com.sale.salesystem.dto.ChartOptionDTO;

import java.util.List;
import java.util.Map;

public interface DashboardService {
    // 获取分析数据
    DashboardVO getAnalysisData(DashboardQueryDTO queryDTO);

    // 获取所有产品类别
    List<String> getAllCategories();

    // 获取所有城市
    List<String> getAllCities();

    // 获取所有商店编号
    List<Long> getAllShopCodes();

    // 获取所有性别选项
    List<String> getAllGenders();

    // 获取所有年龄范围
    List<String> getAllAgeRanges();

    // 获取KPI数据
    DashboardVO.KpiDataVO getKpiData(DashboardQueryDTO queryDTO);

    // 获取图表数据
    DashboardVO.ChartDataVO getChartData(DashboardQueryDTO queryDTO);

    // 获取产品分析数据
    ProductAnalysisVO getProductAnalysis(DashboardQueryDTO queryDTO);

    // 获取客户分析数据
    CustomerAnalysisVO getCustomerAnalysis(DashboardQueryDTO queryDTO);

    // 获取商店分析数据
    ShopAnalysisVO getShopAnalysis(DashboardQueryDTO queryDTO);

    // 获取收入分析数据
    DashboardVO getIncomeAnalysis(DashboardQueryDTO queryDTO);

    // 创建仪表板
    Long createDashboard(DashboardCreateDTO createDTO);
    
    // 获取仪表板详情
    DashboardDetailVO getDashboardDetail(Long dashboardId);
    
    // 更新仪表板状态
    void updateDashboardStatus(Long dashboardId, String status);
    
    // 添加图表
    void addChart(Long dashboardId, DashboardChartDTO chartDTO);
    
    // 删除图表
    void deleteChart(Long chartId);
    
    // 更新图表顺序
    void updateChartOrder(Long chartId, Integer newOrder);
    
    // 获取用户的仪表板列表
    List<DashboardDetailVO> getUserDashboards(Long userId);
    
    // 获取所有已发布的仪表板
    List<DashboardDetailVO> getPublishedDashboards();

    /**
     * 获取图表选项
     * @return 图表选项数据
     */
    ChartOptionDTO getChartOptions();

    /**
     * 获取图表数据
     * @param dataSource 数据源类型
     * @param chartType 图表类型
     * @param filters 过滤条件
     * @return 图表数据
     */
    Map<String, Object> getChartData(String dataSource, String chartType, Map<String, Object> filters);
}